Kopia zaznamu s relaciou 1:N - Firebird

Otázka od: martin

1. 7. 2004 10:25

Dobry den,
  narazil som na problem s ktorym sa uz trapim 2 dni.
  Klasicky pripad:
  2 tabulky (doklad,polozky)
  
  Atributy (doklad) - id_doklad,xxx1,xxx2,xxx3
  Atributy (polozky) - id_polozka,id_doklad,yyy1,yyy2,yyy3

  Cize vazba je cez id_doklad. Je nastaveny CASCADE UPDATE
  ...A POTREBUJEM POMOCOU SQL VYTVORIT KOPIU DOKLADU AJ S POLOZKAMI,
  a to tak aby novy duplikat mal id_doklad nastaveny na novu mnou
  zadanu hodnotu alebo na hodnotu podla generatora.

  Riesim to teraz na strane klienta, ale to riesenie sa mi vobec
  nepaci, a verim, ze existuje nejaka SQL finta, aby ten proces bezal
  na strane servera.

  Skusal som nieco take:
  INSERT INTO doklad SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu
  INSERT INTO polozky SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu

  ale problem je, s primarnym klucom - hlasi to konflikt, nakolko sa
  kopiruje aj hodnota toho kluca, KTORY UZ EXISTUJE
  Dalej problem je v tom, ze v tabulke "polozky" ten insert nastavi
  id_doklad na cislopovodnehodokladu a tam by malo byt cislo
  novehodokladu.

  Ako teda riesite taku kopiu zaznamu/ov kde je vztah medzi tabulkami
  1:N ?

  Verim, ze mi pomozete.
  

--
Martin
D7Pro,FB1.5,FibPlus


Odpovedá: Libor Junek, Medisoft International

1. 7. 2004 11:45

To tvoje reseni s INSERTem je spravne akorat si musis ty sloupce vyjmenovat
a jako hodnotu id musis predavat hodnotu generatoru. Musis si ale to id
ulozit do promene pro ten druhy insert na vazbu. Idealni by byla promenna v
ulozene procedure na FB.

Libor

----- Original Message -----
From: "martin" <matrix@inmail.cz>
Sent: Thursday, July 01, 2004 11:07 AM


> 2 tabulky (doklad,polozky)
>
> Atributy (doklad) - id_doklad,xxx1,xxx2,xxx3
> Atributy (polozky) - id_polozka,id_doklad,yyy1,yyy2,yyy3
>
> Cize vazba je cez id_doklad. Je nastaveny CASCADE UPDATE
> ...A POTREBUJEM POMOCOU SQL VYTVORIT KOPIU DOKLADU AJ S POLOZKAMI,
> a to tak aby novy duplikat mal id_doklad nastaveny na novu mnou
> zadanu hodnotu alebo na hodnotu podla generatora.

> Skusal som nieco take:
> INSERT INTO doklad SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu
> INSERT INTO polozky SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu